// ============================== 导入依赖 ============================== //

import CORE from '@/CORE'
import mixChosen from '@admin/components/choose/mixChosen'
import { PAGE } from '@admin/components/choose/mixSingle'

// ============================== 导出混合 ============================== //

export default {
  /**
   * 混入列表 (配置选项合并)
   */
  mixins: [CORE.mixWeb(), CORE.mixInfo()],

  /**
   * 状态数据 (函数返回对象)
   */
  data() {
    return {
      model: [], // 双向绑定列表
    }
  },

  /**
   * 计算属性 (慎用箭头函数)
   */
  computed: {
    /**
     * 数据列表 (去掉已选部分)
     */
    dataList() {
      const { list, model, info } = this
      return list.filter((item) => !model.some((chosen) => chosen[info.idKey] === item[info.idKey]))
    },

    /**
     * 有效总数
     */
    validTotal() {
      const { dataList, info } = this
      const validList = info.checkImport ? dataList.filter((item) => !item.assetId) : dataList
      return validList.length
    },

    /**
     * 表格属性
     */
    tableProps() {
      const { info: { obj, bind, idKey, height }, dataList } = this
      return {
        ...PAGE,
        key: JSON.stringify(obj[bind]),
        list: dataList,
        idKey,
        height,
        auto: false,
      }
    },

    /**
     * 是否禁用所有复选
     */
    checkboxDisabled() {
      const { disabled, limit, right } = this.info
      if (disabled) return true
      if (!limit) return false
      return right.idList.length >= limit
    },
  },

  /**
   * 监听属性 (深度 deep 首次 immediate)
   */
  watch: mixChosen.watch,

  /**
   * 本地方法 (轻量重要在前)
   */
  methods: {
    ...mixChosen.methods,

    /**
     * 过滤查询
     */
    toSearch() {
      this.setList()
      this.startList()
    },
  },
}
